#!/bin/bash

source ~/.bashrc
# 定义选项字典变量
declare -A opt
# 定义脚本短选项
short_opt="h:P:u:p:d:s:"
# 定义脚本长选项
long_opt="host:,port:,user:,password:,database:,savedir:"
# 定义复制的目录
cp_dir="$HOME/db_storage/backup"
# 设置脚本选项默认值
opt=([d]='barda' [u]='root' [P]=3306 [h]=$IP [p]="1234")
opt+=([s]="$cp_dir")
# 定义时间变量
dt=$(date +%F_%H-%M)

run_bak() {
    sqlfile="${opt[s]}/${opt[d]}_${dt}.sql"
    log_file="${opt[s]}/.${opt[d]}.log"
    backup_file="${opt[s]}/sync/bak_${opt[d]}.sql"
    echo "$dt begin=================================" >> $log_file
    mysqldump -h ${opt[h]} -P ${opt[P]} -u ${opt[u]} -p ${opt[p]} ${opt[d]} > ${sqlfile} 2>> $log_file
    cp ${sqlfile} ${backup_file} -rapuf
    echo "$dt end=================================" >> $log_file
}

parse_args() {
    GETOPT_ARGS=$(getopt -o $short_opt -al $long_opt -- "$@")
    eval set -- "$GETOPT_ARGS"

    while test -n "$1" ; do
        case "$1" in
            -h|--host) opt[h]=$2; shift 2;;
            -P|--port) opt[P]=$2; shift 2;;
            -u|--user) opt[u]=$2; shift 2;;
            -p|--password) opt[p]=$2; shift 2;;
            -d|--database) opt[d]=$2; shift 2;;
            -s|--savedir) opt[s]=$2; shift 2;;
            *) break ;;
        esac
    done
    args="$@"
}

help_show() {
    cat << EOF
mysql_bak
    run -h [ip] -P [port] -u [user] -p [password] -d [database] -s [保存路径]
    help 查看mysql_bak命令帮助
EOF
}

# 删除旧文件
del_file() {
    case $flag in
        y|yes)
            find $cp_dir -maxdepth 1 -name "*.sql" -type f -ctime +7 | xargs rm -f -
            ;;
        n|no|*)
            echo "请及时删除旧文件:"
            find $cp_dir -maxdepth 1 -name "*.sql" -type f -ctime +7 | xargs ls
            ;;
    esac
}

# 过滤第一,二个参数
scriptfile=$0
cmd="$1"
grep -qw -e "$cmd" <<< "run|help" && shift
parse_args "$@"

case "$cmd" in
    run)
        run_bak $args
        ;;
    del)
        read -p "是否删除源文件$1(yes/no)?: " flag
        del_file $flag
        ;;
    help|*)
        help_show
        ;;
esac


